package com.rosense.srpingboot.aspect;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

import com.rosense.srpingboot.cache.WebContextUtil;
import com.rosense.srpingboot.handle.LoginExecption;

/**
 * 
 * @author 李岩飞
 * @email eliyanfei@126.com
 * @date 2018年3月10日 下午6:13:06
 */
@Aspect
@Component
public class HttpAspect {
	/**
	 * 表示所有的Controller都要验证登录授权
	 */
	@Pointcut("execution(public * com.rosense.srpingboot.controller.*Controller.*(..))")
	public void login1() {
	}

	/**
	 * 特定某个注释方式不需要验证
	 */
	@Pointcut("@annotation(NotAuthorize)")
	public void login2() {
	}

	/**
	 * 判断是否登录,把有没有注释授权的方法都要登录授权
	 * 
	 * @param joinPoint
	 * @throws LoginExecption  登录异常
	 */
	@Before(value = "login1() && !login2()")
	public void beforeLogin(JoinPoint joinPoint) throws LoginExecption {
		if (!WebContextUtil.isLogin()) {
			throw new LoginExecption("没有登录");
		}
	}

}
